A variety of devices exists in computer systems for storing data. Desktops, servers, laptops, and other computing devices may include one or more hard drives for storing large amounts of data. Hard drives may be configured for a variety of data access purposes. For example, a server may use a redundant array of inexpensive disks (RAID) configuration, a storage area network (SAN), or other technologies that improve storage characteristics such as latency, fault tolerance, security, capacity, access time, and so on. Laptops and mobile devices may include flash memory, and many computer systems use flash-based memory today in the form of solid-state disks (SSDs). Computing systems also have access to remote storage, such as cloud-based storage services from multiple vendors, online backup solutions, remote datacenters provided within an organization, and so forth.
Software applications can select from any of these devices when storing data. An application may generate documents, configuration information, or other output that the application stores by invoking one or more operating system storage application-programming interfaces (APIs). These APIs typically involve the application explicitly identifying a storage device on which to store data. For example, the operating system may assign a letter or device path to each available storage device that the application specifies along with a folder path within the drive at which to store output data produced by the application. Users, too, become involved in managing data storage, and often memorize where their documents are stored so that the user can inform the application or another application where to find stored data items on the computer system. A user may download a document or other data item with one application, telling the application where to store the item, and then open the item with another application, telling that application where to find the item. Thus, users and applications are heavily involved in data management today.
Often the user (or administrator) is the only one that knows the configuration of the computer system and the particular storage characteristics and benefits of each storage device. For example, the user may know that a storage device identified by drive letter C is an SSD, drive D is a RAID array, drive E is a SAN, and drive F is an optical disk. The user may use his knowledge of each drive's properties to decide where to store data when using an application. For example, if the user wants a fast access time for the data, he may choose to store it on the SSD. If the user wants to archive the data and does not expect to access it frequently, he may burn the data to an optical disk using the optical drive. If the user selects poorly, then the data may be more difficult or slower to access. As data characteristics change, such as a file becoming less frequently accessed by the user, it is up to the user to manually manage the data to delete it, move it to a different storage device, and so forth. Operating systems provide programs and third parties provide a significant number of utilities just for managing data stored by applications. Data management is often a difficult and time-consuming task.